package Text1;
import java.util.*;
public class Main {
//    给定一颗树，树中包含 n个结点（编号 1∼n）和 n−1条无向边。
//    输入格式第一行包含整数 n，表示树的结点数。
//    接下来 n−1行，每行包含两个整数 a和 b，表示点 a
//    和点 b之间存在一条边。

    public static  int N=100010,M = N * 2,n,idx;
    public static int[] h=new int[N];
    public static int[] e=new int[M];
    public static int[] ne=new int[M];
    public static boolean[] st = new boolean[N];
    public static int ans = N; //一开始将最大值赋值成N,最大了
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();
        Arrays.fill(h,-1);
        for (int i = 0; i < n - 1; i++) {
            int a=scanner.nextInt();
            int b=scanner.nextInt();
            add(a,b);add(b,a);
        }
        dfs(1);
        System.out.println(ans);
    }

    private static int dfs(int x) {
        st[x]=true;
        int sum=1,res=0;
        for (int i = h[x]; i!=-1 ; i=ne[i]) {
            int j=e[i];
            if(!st[j]){
                int s=dfs(j);
                res=Math.max(res,s);
                sum+=s;
            }

        }
        res=Math.max(res,n-sum);
        ans=Math.min(res,ans);
        return sum;
    }

    public static void add(int a,int b){
        e[idx]=b;
        ne[idx]=h[a];
        h[a]=idx++;
    }
}
